//
//  UITextView+Emoji.swift
//  1-自定义键盘搭建
//
//  Created by yellow on 15/10/26.
//  Copyright © 2015年 yellow. All rights reserved.
//

import UIKit

extension UITextView{
    
    //获取图文混排中对应的文本如：我[哈哈]
    var emojiText:String{
        //获取表情符号对应的文本
        var strM = String()
        let length = attributedText.length
        attributedText.enumerateAttributesInRange(NSRange(location: 0, length: length), options: []) { (dict, range, _) -> Void in
            //            print("-------")
            //            print(dict)//中的NSAttachment是图片
            //            print(range)//是文本的范围
            //如果是图片
            if let imageAttachment = dict["NSAttachment"] as? EmojiTextAttachment{
                strM += imageAttachment.emoji.chs!
            }else{
                //如果是文字
                let text = (self.text as NSString).substringWithRange(range)
                strM += text
            }
        }
        return strM
    }
    
    
    /// 插入表情符号,各个类型的按钮点击对应的属性文本
    ///
    /// - parameter em: 表情模型
    func insertEmoji(em:Emoji){
        
        
        //如果是空白按钮
        if em.isSpaceBtn == true {
            return
        }
        
        //如果是删除按钮
        if em.isDeleteBtn == true{
            deleteBackward()
            return
        }
        
        //如果是emoji表情
        if let emoji = em.emojiUnicode {
            replaceRange(selectedTextRange!, withText: emoji)
            return
        }
        
        //如果是图片
        insertImage(emoji:em)
        //让键盘输入表情也能呢触发textViewDidChange事件，从而来判断用户是否输入标签
        delegate?.textViewDidChange?(self)
    }
    
    
    //插入图片类型的表情
    func insertImage(emoji em:Emoji){
        //将当前附件中的 emoticon 转换成属性文本
        let imageAttrStr = EmojiTextAttachment(emoji: em).imageText(font!)
        
        //获取当前文本中的属性文本
        let currentAttrText = NSMutableAttributedString(attributedString: attributedText)
        
        currentAttrText.replaceCharactersInRange(selectedRange, withAttributedString: imageAttrStr)
        //记录当前的光标位置
        let currentRange = selectedRange
        attributedText = currentAttrText
        //+1是因为我们插入一个表情后，需要将贯标挪动一个位置
        selectedRange = NSRange(location: currentRange.location + 1, length: 0)
    }

}
